#include <iostream>
using namespace std;

// 快速排序的分区函数
int partition(int arr[], int low, int high) {
    int pivot = arr[high]; // 选择最后一个元素作为基准
    int i = low - 1; // i 是较小元素的索引
    
    for (int j = low; j <= high - 1; ++j) {
        // 如果当前元素小于或等于基准
        if (arr[j] <= pivot) {
            ++i; // 增加较小元素的索引
            // 交换 arr[i] 和 arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    
    // 交换 arr[i+1] 和 arr[high] (或基准)
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    
    return i + 1;
}

// 快速排序函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // pi 是分区索引，arr[pi] 已经排好序
        int pi = partition(arr, low, high);
        
        // 递归地对分区进行排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int main() {
    int n;
    cin >> n;
    
    // 创建一个大小为 n 的数组
    int arr[n];
    
    // 输入数组元素
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }
    
    // 对数组进行快速排序
    quickSort(arr, 0, n - 1);
    
    // 输出排序后的数组
    for (int i = 0; i < n; ++i) {
        cout << arr[i];
        if (i < n - 1) {
            cout << " ";
        }
    }
    cout << endl;
    
    return 0;
}